package com.coderdream.chapter10.strategy.sample;

public class Hand {

	public static final int HANDVALUE_STONE = 0; // 表示石頭
	public static final int HANDVALUE_JIANDAO = 1; // 表示剪刀
	public static final int HANDVALUE_BU = 2; // 表示布
	
	// 表示猜拳手勢的 3 個對象實例
	public static final Hand[] hand = {
		new Hand(HANDVALUE_STONE),
		new Hand(HANDVALUE_JIANDAO),
		new Hand(HANDVALUE_BU),
	};

	// 表示猜拳手勢的字符串
	public static final String[] name = {
		"石頭",
		"剪刀",
		"布",
	};
	
	private int handvalue; // 猜拳手勢的值
	
	public Hand(int handvalue) {
		this.handvalue = handvalue;
	}
	
	// 從值取得對象實例
	public static Hand getHand(int handvalue){
		return hand[handvalue];
	}
	
	// 若 this 贏過 h， 則為 true
	public boolean isStrongerThan(Hand h) {
		return fight(h) == 1;
	}
	
	// 若 this 輸給 h， 則為 true
	public boolean isWeakerThan(Hand h) {
		return fight(h) == -1;
	}
	
	// 平手為 0，若 this 勝出為 1，若 h 勝出則為 -1
	private int fight(Hand h) {
		if (this == h) {
			return 0; 
		} else if ((this.handvalue + 1) % 3 == h.handvalue) {
			return 1;
		} else {
			return -1;
		}
	}
	
	// 轉換成字符串
	public String toString() {
		return name[handvalue];
	}
}
